トレースは必要ですか?

ご質問
 トレースは時間がかかるため、効率が悪い気がします。
 プログラムを作っていれば自然にできるようなるという話も聞きました。やはりトレースしたほうがいいのですか?
福嶋の回答
 理想をいえば、始めからプログラミング言語を使ってプログラムをたくさん作って、プログラミングセンスを身につけるのが最もいいでしょう。
 コンピュータが大好きで、自分でプログラミングに興味をもった人は、何時間もプログラミングに取り組みます。このため、意識的にトレースをしなくても、プログラミングができるようになります。実は、デバッグの過程で、無意識にトレースを繰り返しているのですけどね。

 私も学生時代にパソコンに魅せられて、徹夜でキーボードを叩いていました。昔は、雑誌にプログラムが掲載されていて、それをキーボードから打ち込んでいたのです。ゲームで遊びたいという理由で、何十本も打ち込んだと思います。そのうちに、いつも出てくる言葉(命令)は、素早く入力できるようになり、少し意味が分かるようになってきます。プログラムを作れるようになったと自信がもてたのは、雑誌に載っていた野球ゲームの改造を重ねた後でした。私も、トレースの訓練はしていません。
 プログラミングが大好きで、学校でも自宅でもプログラミングに取り組む時間が十分にある人は、プログラミングを通して学習したほうが楽しいですね。

 しかし、限られた時間の中で、プログラミングの学習をするするとき、トレースをすることは、とても効果的です。
 数十年前に、商業高校に情報処理科ができた頃は、1人が1台のコンピュータを使うことなど夢物語でした。中学校を卒業したばかりの生徒たちが、コンピュータを使わずに、机上でプログラミングセンスを身につける方法として、トレースの訓練を積むという指導法が生れたそうです。
 私は、35年ぐらい前に、ある専門学校の情報処理科で、小学校の計算ドリルのように、繰り返し大量のトレースをさせるという指導法を知りました。自分でも実践してみて、確かに教育効果が上がることを確認しています。
 トレースの訓練がいいのは、頭の良し悪しにあまり関係なく、誰でも一定量の訓練を積めば、必ず結果が出るところです(*1)。

 これは、運動神経の良い悪いにあまり関係なく、練習をすれば、誰でも自転車に乗れるようになるのと似ています。
 自転車の練習を始めても、最初は、バランスがとれずに倒れてしまって、乗れるようになる気がしません。それでも練習を続けていると、ある日、昨日まで乗れなかったのが嘘のように、突然、1人で乗れるようになりますよね。
 プログラミングも、少しずつできるようになるのではなく、ある日、できるようになります。毎日の経験が、バケツに水を貯めるように蓄積されていき、水がいっぱいになると突然できるようになります。

 トレースをしても、しばらくは変化がなく、こんなことに時間をかけて、はたしてプログラミングができるようになるのだろうか、と不安に思う人もいるでしょう。
 自転車に乗れるようになるまでの時間に個人差があるように、トレースの訓練も、結果が出るまでには個人差があります。
 しかし、毎日、少しずつでも水を貯めれば、必ずバケツから水が溢れる日がやってきます。

 学生や独学者は、できるようになった日、頭の中のCPUが完成した瞬間に気づく人が多いですよ(*2)。
あれ? 分かるぞ」という感触ね。「あれ、乗れたよ」と同じです。 

 頭の中にCPUができると、流れ図や疑似言語プログラムが理解できるようになります。ここまでくれば、基本情報技術者試験の午後のアルゴリズム問題は、問題演習を積むだけで解けるようになります。
 逆に、頭の中にCPUができる前に過去問題の演習をしても、類似問題が出たときに運が良ければ解けるというレベルで足踏みする人が多いです。
 確信をもって正解を選べない、なんとなく当たるけど、自信がない
このような人は、もう少しで水が溢れるところまで来ているので、最後まで水を入れて溢れさせないともったいないですよ。

 いつやるの? 
 今でしょう
 (*3)

 ドリルのようにトレースを訓練したい人には、読者エリアに、「秘伝のアルゴリズム」をPDFで公開しています。必要に応じてご利用ください。
(と、2011年には書きましたが、疑似言語プログラムの過去問題も十分にたまりました。テキストで流れ図や短い疑似言語プログラムのトレースを終えたら、過去問題の疑似言語プログラムをトレースすればいいです。)


 「うかる! 基本情報技術者 午後・アルゴリズム編」に掲載しているアルゴリズムやアルゴリズム補講で扱っているアルゴリズムは、基本情報技術者試験を対象にしたものです。世の中には、優れたアルゴリズムがたくさんあります。
 頭の中にCPUができても、試験合格がゴールではないので、次の段階として、
 ・先人たちが残してくれた多くのアルゴリズムを学ぶ
ということも大切です。ただし、これは合格後でいいでしょう。

 また、プログラムを作るには、プログラム言語固有の文法や考え方を学んでいく必要があります。


*1) 自転車の練習を始めた日に、乗れる子がまれにいますよね。正直にいうと、プログラミング未経験でも、トレースの訓練なしに、流れ図記号や制御文の意味を教えるだけで、始めからアルゴリズムの問題を解くことができる学生がまれにいます。もしかすると、理系大学にはそういう学生が多いのかもしれません。そのような学生には無駄な訓練になりがちなので、指導する側は注意が必要です。トレースの練習をしなくてもアルゴリズムの問題が解ける人は、学習時にトレースをする必要はありません。
*2) 仕事でプログラミングを始めた人の場合は、毎日、長い時間、プログラミングに取り組み、行き詰っても近くに指導者(分かる人)がいます。このため、自分で気づかないうちにできるようになっていた人が多いようです。

*3) もちろん予備校のCMのパクリ(笑)でしたが、林先生は有名になられましたね。

(2012/12/8) 
(2021/05/13) 新館に移動し、古くなった部分などを一部修正。